package com.tjetc._1collection._1list;

import java.util.Iterator;
import java.util.LinkedList;

@SuppressWarnings("all")
public class _4LinkedList {
    public static void main(String[] args) {
        /*
            LinkedList:
            1.LinkedList底层实现了双向链表和双端队列特点
            2.可以添加任意元素(元素可以重复),包括null
            3.线程不安全，没有实现同步
            4.维护了两个属性first和last分别指向⾸节点和尾节点
                ⾸节点
                transient Node<E> first;
                尾节点
                transient Node<E> last;
                Node类型：静态内部类
                    数据
                    E item;
                    下一个节点
                    Node<E> next;
                    上一个节点
                    Node<E> prev;
         */

        LinkedList linkedList = new LinkedList();
        linkedList.add(1);
        // 添加到头部
        linkedList.addFirst(2);
        System.out.println(linkedList);

        // 添加到尾部
        linkedList.addLast(3);
        System.out.println(linkedList);

        // 移除头部
        linkedList.remove();
        System.out.println(linkedList);

        // 获取数据
        System.out.println("linkedList.getFirst() = " + linkedList.getFirst());
        System.out.println("linkedList.getLast() = " + linkedList.getLast());

        for (int i = 0; i < linkedList.size(); i++) {
            // 注意：这里的参数Index和数组中的Index不是一回事
            System.out.println(linkedList.get(i));
        }

        Iterator iterator = linkedList.iterator();
        while (iterator.hasNext()) {
            Object next = iterator.next();
            System.out.println(next);
        }

        for (Object o : linkedList) {
            System.out.println(o);
        }

    }
}
